package com.bangcommunity.bbframe.mybatis.manager;

import com.bangcommunity.bbframe.common.base.PageBean;
import com.bangcommunity.bbframe.mybatis.criteria.AbstractorCriteria;
import org.springframework.transaction.annotation.Transactional;

import java.io.Serializable;
import java.util.List;

/**
 * 业务操作基类
 * 
 * @author tanghc
 */
public interface IBaseManager<PK extends Serializable, E extends Serializable, C extends AbstractorCriteria> {
    /**
     * 根据条件统计记录数
     */
    int countByExample(C example);

    /**
     * 根据主键删除记录
     */
    @Transactional
    void deleteByPrimaryKey(PK id);

    /**
     * 根据条件删除记录
     */
    @Transactional
    int deleteByExample(C example);

    /**
     * 添加记录
     */
    @Transactional
    void insert(E record);

    /**
     * 批量添加记录
     */
    @Transactional
    void batchInsert(List<E> list);

    /**
     * 根据条件查询数据
     */
    List<E> selectByExample(C example);

    /**
     * 根据主键查询一条记录
     */
    E selectByPrimaryKey(PK id);

    /**
     * 分页查询数据
     */
    PageBean<E> page(C example);

    /**
     * 根据主键更新记录,只更新值不为空的列
     */
    @Transactional
    void updateByPrimaryKeySelective(E record);

    /**
     * 根据条件更新数据,只更新不为空的列
     */
    @Transactional
    int updateByExampleSelective(E record, C example);

}